package com.uuzz.lottery.agent.gateway.flow.answer.mappingimpl.one2n2nimpl.business.impl;

import com.uuzz.lottery.agent.gateway.base.IConvertor;
import com.uuzz.lottery.agent.gateway.base.ISupplier;
import com.uuzz.lottery.agent.gateway.flow.answer.mappingimpl.one2n2nimpl.business.GroupBusinessIn;
import com.uuzz.lottery.agent.gateway.flow.answer.mappingimpl.one2n2nimpl.business.GroupBusinessOut;
import com.uuzz.lottery.agent.gateway.flow.answer.mappingimpl.one2n2nimpl.business.IBusinessIn;
import com.uuzz.lottery.agent.gateway.flow.answer.mappingimpl.one2n2nimpl.business.IBusinessOut;
import com.uuzz.lottery.agent.gateway.flow.answer.mappingimpl.one2n2nimpl.business.IConnectBusiness;
import com.uuzz.lottery.agent.gateway.flow.answer.mappingimpl.one2n2nimpl.business.IGroupBusinessCallBody;

public abstract class GroupBusinessCallBodySupport<BI extends IBusinessIn,BO extends IBusinessOut,SI extends ISupplier<GroupBusinessIn,BI>,CO extends IConvertor<BO,GroupBusinessOut>,
C extends IConnectBusiness<BI,BO, ?, ?, ?, ?, ?>> implements
IGroupBusinessCallBody<SI, CO, C> {
	
	protected SI inSupplier;
	
	protected CO outConvertor;
	
	protected C call;

    /**
     * 取得调用标示
     * <br>描 述：
     * <br>作 者：liuqing
     * <br>历 史: (版本) 作者 时间 注释
     *
     * @return
     */
    @Override
    public String getCallId() {
        return call.businessToken();
    }

    /**
     * 入参转换成 C的入参 的类型转换器
     * <br>描 述：
     * <br>作 者：liuqing
     * <br>历 史: (版本) 作者 时间 注释
     *
     * @return
     */
    @Override
    public SI getInSupplier() {
        return inSupplier;
    }

    /**
     * C的出参转换成 O 的类型转换器
     * <br>描 述：
     * <br>作 者：liuqing
     * <br>历 史: (版本) 作者 时间 注释
     *
     * @return
     */
    @Override
    public CO getOutConvertor() {
        return outConvertor;
    }

    /**
     * 封装的调用器
     * <br>描 述：
     * <br>作 者：liuqing
     * <br>历 史: (版本) 作者 时间 注释
     *
     * @return
     */
    @Override
    public C getCall() {
        return call;
    }

    public abstract void setInSupplier(SI inSupplier);

    public abstract void setOutConvertor(CO outConvertor);

    public abstract void setCall(C call);
}
